From 9c04557e2d6601750d3a54bdee74ac3e2973d4de Mon Sep 17 00:00:00 2001 From: "emellor@ewan" Date: Sun, 9 Oct 2005 11:57:24 +0100 Subject: [PATCH] Remove code seeding RNG from /dev/urandom. The random module's default RNG is already seeded from the clock, so this is unnecessary, non-portable, and expensive. This should improve start-up time of Xend. Replace twisty maze of code with something sensible. Signed-off-by: Ewan Mellor --- tools/python/xen/xend/uuid.py | 60 +++++++++++------------------------ 1 file changed, 18 insertions(+), 42 deletions(-) diff --git a/tools/python/xen/xend/uuid.py b/tools/python/xen/xend/uuid.py index 6c923feccf..b37cb17a39 100644 --- a/tools/python/xen/xend/uuid.py +++ b/tools/python/xen/xend/uuid.py @@ -13,14 +13,19 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #============================================================================ # Copyright (C) 2005 Mike Wray +# Copyright (C) 2005 XenSource Ltd #============================================================================ + """Universal(ly) Unique Identifiers (UUIDs). """ + + import commands import random -def uuidgen(random=True): + +def getUuidUuidgen(random = True): """Generate a UUID using the command uuidgen. If random is true (default) generates a random uuid. @@ -33,50 +38,21 @@ def uuidgen(random=True): cmd += " -t" return commands.getoutput(cmd) -class UuidFactoryUuidgen: - - """A uuid factory using uuidgen.""" - def __init__(self): - pass +def getUuidRandom(): + """Generate a random UUID.""" + + bytes = [ random.randint(0, 255) for i in range(0, 16) ] + # Encode the variant. + bytes[6] = (bytes[6] & 0x0f) | 0x40 + bytes[8] = (bytes[8] & 0x3f) | 0x80 + f = "%02x" + return ( "-".join([f*4, f*2, f*2, f*2, f*6]) % tuple(bytes) ) - def getUuid(self): - return uuidgen() -class UuidFactoryRandom: +#uuidFactory = getUuidUuidgen +uuidFactory = getUuidRandom - """A random uuid factory.""" - - def __init__(self): - f = file("/dev/urandom", "r") - seed = f.read(16) - f.close() - self.rand = random.Random(seed) - - def randBytes(self, n): - return [ self.rand.randint(0, 255) for i in range(0, n) ] - - def getUuid(self): - bytes = self.randBytes(16) - # Encode the variant. - bytes[6] = (bytes[6] & 0x0f) | 0x40 - bytes[8] = (bytes[8] & 0x3f) | 0x80 - f = "%02x" - return ( "-".join([f*4, f*2, f*2, f*2, f*6]) % tuple(bytes) ) - -def getFactory(): - """Get the factory to use for creating uuids. - This is so it's easy to change the uuid factory. - For example, for testing we might want repeatable uuids - rather than the random ones we normally use. - """ - global uuidFactory - try: - uuidFactory - except: - #uuidFactory = UuidFactoryUuidgen() - uuidFactory = UuidFactoryRandom() - return uuidFactory def getUuid(): - return getFactory().getUuid() + return uuidFactory() -- 2.30.2